//
//  Error.swift
//  pluto
//
//  Created by andyge on 15/7/27.
//  Copyright © 2015年 gejingguo. All rights reserved.
//

import Foundation


// Error协议定义
public protocol Error {
    
    // 错误吗
    var errorCode: Int { get }
    
    // 错误信息
    var errorMsg: String { get }
}



public enum TcpErrorNo: Int {
    case TcpErrorNo_CreateSocket = 101
    case TcpErrorNo_SocketBind = 102
    case TcpErrorNo_SocketListen = 103
    case TcpErrorNo_SocketAccept = 104
    case TcpErrorNo_SocketEagain = 105
    case TcpErrorNo_SocketFdInvalid = 106
    case TcpErrorNo_SocketRead = 107
    case TcpErrorNo_SocketClosedByPeer = 108
    case TcpErrorNo_ProtoDelegateNull = 109
    case TcpErrorNo_SocketSend = 110
    case TcpErrorNo_SocketSetOption = 111
    case TcpErrorNo_SocketGetOption = 112
    case TcpErrorNo_KQueueCreate = 113
    case TcpErrorNo_Kevent = 114
    case TcpErrorNo_KqueueNotInit = 115
    case TcpErrorNo_PollerCountLimit = 116  // 最大连接数量限制
    case TcpErrorNo_SendBufNotEnough = 117
}

class TcpError: Error {
    var errorCode: Int = 0
    var errorMsg: String = ""
    
    init(err: Int, msg: String) {
        self.errorCode = err
        self.errorMsg = msg
    }
    
    init(err: Int) {
        self.errorCode = err
        self.errorMsg = String(errno) + ":" + String.fromCString(strerror(errno))!
    }
}
